package fr.octo.astroids.server.utils;
import fr.octo.astroids.server.domain.Triangle;
import fr.octo.astroids.server.domain.Vector2;
import org.junit.Test;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat;
public class GeometryTest {
@Test
public void testIsInsideTriangle() throws Exception {
Vector2 p = new Vector2(2d, 3d);
Vector2 pA = new Vector2(1d, 1d);
Vector2 pB = new Vector2(4d, 2d);
Vector2 pC = new Vector2(2d, 7d);
assertThat(Geometry.isInsideTriangle(p, pA, pB, pC)).isTrue();
}
@Test
public void testIsNotInsideTriangle() throws Exception {
Vector2 p = new Vector2(1.5d, 5d);
Vector2 pA = new Vector2(1d, 1d);
Vector2 pB = new Vector2(4d, 2d);
Vector2 pC = new Vector2(2d, 7d);
assertThat(Geometry.isInsideTriangle(p, pA, pB, pC)).isFalse();
}
@Test
public void testIsInsideTriangle2() throws Exception {
Vector2 p = new Vector2(2d, 3d);
Vector2 pA = new Vector2(1d, 1d);
Vector2 pB = new Vector2(4d, 2d);
Vector2 pC = new Vector2(2d, 7d);
Triangle triangle = new Triangle(pA, pB, pC);
assertThat(Geometry.isInsideTriangle(p, triangle)).isTrue();
}
@Test
public void testIsNotInsideTriangle2() throws Exception {
Vector2 p = new Vector2(1.5d, 5d);
Vector2 pA = new Vector2(1d, 1d);
Vector2 pB = new Vector2(4d, 2d);
Vector2 pC = new Vector2(2d, 7d);
Triangle triangle = new Triangle(pA, pB, pC);
assertThat(Geometry.isInsideTriangle(p, triangle)).isFalse();
}
@Test
public void testCoordinatesAfterRotation() {
Vector2 point = new Vector2(2d, 0d);
Double rotation = 50 * Math.PI / 180;// rotation of 50 degrees
DecimalFormat df = new DecimalFormat("0.00", new DecimalFormatSymbols(Locale.ENGLISH));
assertThat(df.format(Geometry.coordinatesAfterRotation(point, rotation).x)).isEqualTo("1.29");
assertThat(df.format(Geometry.coordinatesAfterRotation(point, rotation).y)).isEqualTo("1.53");
}
}